/**
 * Created by G on 2017/11/30.
 */
;(function(win, $){
    'use strict';
    //初始化分页页面
    function bulidHtml(cfg){
        var $warp = $('<div>').addClass("cafe-pagination");
        var $pervPage = $('<span>').addClass("cp-prev cp-page").text("上一页");
        var $pages = $('<span>').addClass("cp-pages");
        var $nextPage = $('<span>').addClass("cp-next cp-page").text("下一页");
        var $curPage = $('<input>').attr({"type" : "text"}).addClass("cp-pageNum cp-page");
        var $goto = $('<span>').addClass("cp-goto cp-page").text(cfg.gotoText);
        for(var i = 0; i < cfg.pages; i++){
            if(i > 4){
                $pages.append($('<span>').addClass("cp-page ellipsis").text("..."));
                $pages.append($('<span>').attr("sid",cfg.pages).addClass("cp-page").text(cfg.pages));
                break;
            }else{
                $pages.append($('<span>').attr("sid",i + 1).addClass("cp-page").text(i + 1));
            }
        }
        $pages.find("span").first().addClass("active");
        $warp.css("text-align",cfg.align).append($pervPage).append($pages).append($nextPage).append($curPage).append($goto);
        return $warp;
    }
    //重置分页页面
    function restPages($drop,tatolPage,newPage, isNext) {
        var $first = $drop.find(".cp-pages>span:first");
        var $last = $drop.find(".cp-pages>span:last");
        $drop.find(".cp-pages>span:not(:first):not(:last)").remove();
        if (isNext) {
            if(tatolPage - newPage > 4){
                for(var i = 0; i < 3; i++){
                    var page = newPage + i;
                    $last.before($('<span>').attr("sid",page).addClass("cp-page").text(page));
                }
                $last.before($('<span>').addClass("cp-page ellipsis").text("..."));
            }else{
                for(var i = 0; i < 4; i++){
                    var page = tatolPage - 1 - i;
                    $first.after($('<span>').attr("sid",page).addClass("cp-page").text(page));
                }
            }
            $first.after($('<span>').addClass("cp-page ellipsis").text("..."));
        }else{
            if(newPage - 1 > 4){
                for(var i = 0; i < 3; i++){
                    var page = newPage - i;
                    $first.after($('<span>').attr("sid",page).addClass("cp-page").text(page));
                }
                $first.after($('<span>').addClass("cp-page ellipsis").text("..."));
            }else{
                for(var i = 0; i < 4; i++){
                    var page = i + 2;
                    $last.before($('<span>').attr("sid",page).addClass("cp-page").text(page));
                }
            }
            $last.before($('<span>').addClass("cp-page ellipsis").text("..."));
        }
        $("#cp-pages>span[sid='" + newPage + "']").click();
    }
    //绑定事件
    function bindEvent($drop,cfg){
        $drop.off().on("click",".cp-prev",function(){ //上一页
            var $page = $drop.find(".cp-pages>span.active");
            var curPage = parseInt($page.attr("sid"));
            if(curPage > 1){
                if($page.prev().hasClass("ellipsis")){
                    restPages($drop,cfg.pages,curPage - 1,false);
                }else{
                    $page.prev().click();
                }
            }
        }).on("click",".cp-pages span:not(.ellipsis)",function(){//切换页数
            if(!$(this).hasClass("active")){
                $(this).addClass("active").siblings().removeClass("active");
                if($.isFunction(cfg.call)){
                    cfg.call(parseInt($(this).attr("sid")));
                }
            }
        }).on("click",".cp-next",function(){//下一页
            var $page = $drop.find(".cp-pages>span.active");
            var tatolPage = cfg.pages;
            var curPage = parseInt($page.attr("sid"));
            if(curPage < tatolPage){
                if($page.next().hasClass("ellipsis")){
                    restPages($drop,tatolPage,curPage + 1,true);
                }else{
                    $page.next().click();
                }
            }
        }).on("keyup",".cp-pageNum",function(){//只能输入整数
            var reg = /^(\d){0,}$/gi;
            var val = $(this).val().trim();
            if("" != val){
                val = parseFloat(val);
            }
            if(0 == val || !reg.test(val)){
                $(this).val("");
            }
        }).on("click",".cp-goto",function(){//跳转指定页
            var val= $drop.find(".cp-pageNum").val().trim();
            var tatolPage = cfg.pages;
            var curPage = parseInt($drop.find(".cp-pages>span.active").attr("sid"));
            if("" == val){
                CafeJS.alert("请输入需要跳转的页数");
            }else if(parseInt(val) > tatolPage){
                CafeJS.alert("不能大于总页数");
            }else{
                var $page = $drop.find(".cp-pages>span[sid='" + val + "']");
                if($page.is(":visible")){
                    $page.addClass("active").siblings().removeClass("active");
                }else{
                    restPages($drop,tatolPage,parseInt(val),parseInt(val) > curPage);
                }
                if($.isFunction(cfg.call)){
                    cfg.call(parseInt(val));
                }
            }
        });
    }
    var Pagination = function(settings){
        var options = {
            appendTo: null,//控件所在容器
            pages : null,//总页数
            gotoText : "GO",//跳转按钮名称
            align : "right",//对齐方式
            call : null//控件点击事件
        };
        this.config = $.extend({}, options, settings);
        var $container = $(this.config.appendTo);
        this.$drop = bulidHtml(this.config);
        if(this.config.appendTo){
            $container.empty().append(this.$drop);
        }
        bindEvent(this.$drop,this.config);
    };
    Pagination.prototype = {
    };
    CafeJS.Pagination = function(settings){
        var drop = new Pagination(settings);
        return drop;
    }
})(window, jQuery);